#-*- coding: utf-8 -*-

'''
autor1: João Reis, Nº5236
autor2: Miguel Romão, Nº5513
data: 22 de Outubro 2013
obs: Leitura de dados '.xls'
'''

import os
from xlrd import open_workbook

class LeituraDados:
	'''
		Esta classe contém as funções para leitura e recolha dos dados do 
		documento '.xls'.
	'''

	def __init__(self, ficheiro_xls):
		self.livro = open_workbook(ficheiro_xls)
		self.folha = self.livro.sheet_by_name('Resultados')

	def ler_dados(self, num_linha):
		'''
			Função que lê uma linha do ficheiro '.xls'.

			Args:
					num_linha: número da linha do ficheiro '.xls'.
			
			Returns:
					uma lista com os dados da linha lida.
		'''
		lista_dados = []

		dados_linha = self.folha.row(num_linha)

		# lê os dados de uma linha do ficheiro '.xls' e guarda-os numa lista
		for x in range(0, 9):			
			if dados_linha[x].value == '':
				lista_dados.append(0.0)
			elif x == 2 or x == 3:
				lista_dados.append(dados_linha[x].value.encode('utf-8'))
			else:
				lista_dados.append(dados_linha[x].value)

		return lista_dados

	def ler_institutos(self):
		'''
			Função que lê todos os institutos do ficheiro '.xls' e separa os
			nomes dos institutos dos nomes das escolas.
			
			Returns:
					uma lista com os nomes dos institutos ordenados e sem
					repetições.
		'''
		lista_institutos = []		

		# ciclo que lê os nomes de todas as instituições do ficheiro '.xls'
		for x in range(3, self.folha.nrows - 2):
			lista_temp = []
			nome = []

			dados_linha = self.folha.row(x)
			
			# procura o instituto de Trás-os-Montes e Alto Douro para juntar 
			# os nomes que separa ao fazer o split pelo hífen
			if dados_linha[2].value.find('Alto') != -1:
				lista_temp.append(dados_linha[2].value.encode('utf-8'))
				nome = lista_temp[0].split('-')
				string = nome[0] + '-' + nome[1] + '-' + nome[2]
				lista_institutos.append(string)
			elif dados_linha[2].value.find('-') != -1:
				lista_temp.append(dados_linha[2].value.encode('utf-8'))
				nome = lista_temp[0].split(' -')
				lista_institutos.append(nome[0])
			else:
				lista_institutos.append(dados_linha[2].value.encode('utf-8'))
			del lista_temp, nome

		# ordena e remove duplicados da lista de institutos
		nova_lista_institutos = sorted(set(lista_institutos)) 

		return nova_lista_institutos